package com.example.toy.core.writer;

import com.example.toy.core.dataset.BigCollection;
import com.example.toy.core.merge.MergeMode;
import com.example.toy.core.record.ToyRecord;
import com.example.toy.core.record.key.ToyRecordKey;

/** 写表时： 1. 创建版本锁 2. 写数据 3. 提交事务 */
public interface ToyTableWriter {

  /**
   * 插入数据，返回插入ID
   *
   * @param records
   * @param mode
   * @return
   */
  BigCollection<ToyRecordKey> save(
      BigCollection<ToyRecord> records, WriteScope scope, MergeMode mode, HardMode hardMode);

  /**
   * 更新数据，返回更新ID
   *
   * @param records
   * @return
   */
  BigCollection<ToyRecordKey> update(BigCollection<ToyRecord> records);

  /**
   * 删除数据，返回删除条数
   *
   * @param recordKeys
   * @return
   */
  long deleteByKey(BigCollection<ToyRecordKey> recordKeys, HardMode hardMode);

  /**
   * 删除数据，返回删除条数
   *
   * @param records
   * @return
   */
  long delete(BigCollection<ToyRecord> records, HardMode hardMode);

  /** 开启事务 */
  void startTransaction();

  /** 提交事务 */
  void commitTransaction();

  /** 提交事务 */
  void rollbackTransaction();
}
